package 蓝桥真题;

import java.util.Scanner;

public class 受伤的皇后 {
	   static Scanner sc=new Scanner(System.in);
	   final static int N=20;
       static int n,cnt;
       static boolean row[]=new boolean[N],col[]=new boolean[N],dj[]=new boolean[N],fdj[]=new boolean[N],st[][]=new boolean[N][N];
       static void dfs(int x){
    	      if(x==n){
    	    	  cnt++;
    	    	  return;
    	      }
    	      for(int y=0;y<n;y++){
    	    	  if(!row[x]&&!col[y]){
    	    		  boolean flag=true;
    	    		  if(dj[y-x+n]&&flag){
    	    			  for(int i=1;i<=2;i++){
    	    				  int a=x-i,b=y-i;
    	    				  if(a>=0&&a<n&&b>=0&&b<n&&st[a][b])flag=false;
    	    			  }
    	    			  for(int i=1;i<=2;i++){
    	    				  int a=x+i,b=y+i;
    	    				  if(a>=0&&a<n&&b>=0&&b<n&&st[a][b])flag=false;
    	    			  }
    	    		  }
    	    		  if(fdj[y+x]&&flag){
    	    			  for(int i=1;i<=2;i++){
    	    				  int a=x+i,b=y-i;
    	    				  if(a>=0&&a<n&&b>=0&&b<n&&st[a][b])flag=false;
    	    			  }
    	    			  for(int i=1;i<=2;i++){
    	    				  int a=x-i,b=y+i;
    	    				  if(a>=0&&a<n&&b>=0&&b<n&&st[a][b])flag=false;
    	    			  }
    	    		  }
    	    		  if(flag){
                          st[x][y]=true;
                          row[x]=true;col[y]=true;dj[y-x+n]=true;fdj[x+y]=true;
    	    			  dfs(x+1);
    	    			  row[x]=false;col[y]=false;dj[y-x+n]=false;fdj[x+y]=false;
    	    			  st[x][y]=false;
    	    		  }
    	    	  }
    	      }
       }
       public static void main(String[] args) {
		      n=sc.nextInt();
		      dfs(0);
		      System.out.print(cnt);
	}
}
